/*eslint-disable*/
const fs = require('fs')
const chalk = require(`chalk`)
const semver = require('semver') // node版本检测工具
const syncRequest = require('sync-request') // 请求库
const Log = console.log
/*
* 插件工具集
* */
const util = {
    deleteFolderAllNum: 0,
    // 检测更新版本
    checkUpdateVersion(pkgName, currentVersion, npmUrl) {
        const res = syncRequest('GET', `${npmUrl}${pkgName}`)
        const data = res.getBody('utf8') ? JSON.parse(res.getBody('utf8')) : {}
        let latest = currentVersion
        let lastVersion = currentVersion
        if (res.statusCode === 200) {
            latest = data['dist-tags']['latest']
            lastVersion = data['versions'][latest]['lastVersion']
        }
        return {
            latest,
            lastVersion
        }
    },
    // 检测node版本
    checkNodeVersion(nodeVersion, repoNodeVersion) {
        const versionTrue = semver.satisfies(nodeVersion, repoNodeVersion)
        if (!versionTrue) {
            Log(chalk.red(`
            [node version ERROR]: 
            您当前系统的node版本为 ${nodeVersion}，请升级！
            node.js版本必须满足 ${repoNodeVersion} 才能运行本工具!     
            `))
        }
        return versionTrue
    },
    // 检测是否存在重复文件
    hasFileName(flieName) {
        return fs.existsSync(flieName)
    },
    // 数组删除所有指定项
    arrayDelAllForKey(array, key) {
        const arrayStr = array.join()
        const newStr = arrayStr.replaceAll(`,${key}`, '')
        return newStr.split(',')
    },
    // 移除目录中所有文件
    _deleteFolder(dir, callback) {
        let files = []
        if (fs.existsSync(dir)) {
            files = fs.readdirSync(dir) //返回文件和子目录的数组
            files.forEach(function (file, index) {
                const curPath = dir + '/' + file
                if (fs.statSync(curPath).isDirectory()) { // //同步读取文件夹文件，如果是文件夹，则函数回调
                    return util._deleteFolder(curPath)
                } else {
                    util.deleteFolderAllNum--
                    fs.unlinkSync(curPath) //是指定文件，则删除
                }
            })
            fs.rmdirSync(dir)
        }
        if (util.deleteFolderAllNum <= 0) {
            callback && callback(util.deleteFolderAllNum)
        }
    },
    // 查找所有文件总数
    _readFileAll(dir, list = []) {
        const files = fs.readdirSync(dir) //返回文件和子目录的数组
        files.forEach(function (file) {
            const curPath = dir + '/' + file
            if (fs.statSync(curPath).isDirectory()) { // //同步读取文件夹文件，如果是文件夹，则函数回调
                util._readFileAll(curPath, list)
            } else {
                list.push(file)
            }
        })
    },
    // 删除文件目录
    deleteDir(ora, dir) {
        return new Promise((resolve, reject) => {
            let _Loading = null // 创建加载器
            if (!dir) return
            // const len = util._readFileLen() // 获取文件总数
            const fileList = []
            util._readFileAll(dir, fileList)
            util.deleteFolderAllNum = fileList.length

            if (ora)
                _Loading = ora({
                    text: `正在删除本地重名目录...`,
                    interval: 20,
                    isEnabled: true
                }).start() // 开始状态 => 加载状态
            util._deleteFolder(dir, function (num) {
                _Loading.succeed(chalk.greenBright(`======| 删除本地重名目录成功 |======`)) // 加载状态 => 成功状态
                resolve(true)
            })
        })
    }
}
module.exports = util
